#ifndef OBJSERVER_H_
#define OBJSERVER_H_

class Subject;
class Number;
class BigLetter;
class SmallLetter;

/*
 * Abstract Observer define a interface to update. 
 */
class Observer
{
public:
	virtual ~Observer(void);

public:
	Observer(void);

public:
	virtual void update(Subject*) = 0;
};

/*
 * Concrete Observer implements the interface of
 * update for a a concrete class.
 */
class BigLetterObserver : public Observer
{
public:
	BigLetterObserver(Number*, BigLetter*);
	~BigLetterObserver();

public:
	void update(Subject*);

private:
	Number* m_subject;
	BigLetter* m_bigLetter;
};

class SmallLetterObserver : public Observer
{
public:
	SmallLetterObserver(Number*, SmallLetter*);
	~SmallLetterObserver();

public:
	void update(Subject*);

private:
	Number* m_subject;
	SmallLetter* m_smallLetter;
};

#endif // OBJSERVER_H_
